package com.zenithmind.classroom.pojo.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 课程详情VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "课程详情VO")
public class CourseDetailVO {

    /**
     * 课程ID
     */
    @Schema(description = "课程ID", example = "1234567890")
    private String id;

    /**
     * 课程标题
     */
    @Schema(description = "课程标题", example = "Java从入门到精通")
    private String title;

    /**
     * 课程副标题
     */
    @Schema(description = "课程副标题", example = "零基础学Java")
    private String subtitle;

    /**
     * 课程描述
     */
    @Schema(description = "课程描述")
    private String description;

    /**
     * 课程封面图片URL
     */
    @Schema(description = "课程封面图片URL")
    private String coverImageUrl;

    /**
     * 讲师用户ID
     */
    @Schema(description = "讲师用户ID")
    private String instructorId;

    /**
     * 讲师姓名
     */
    @Schema(description = "讲师姓名", example = "张老师")
    private String instructorName;

    /**
     * 讲师头像
     */
    @Schema(description = "讲师头像")
    private String instructorAvatar;

    /**
     * 课程分类ID
     */
    @Schema(description = "课程分类ID")
    private String categoryId;

    /**
     * 课程分类名称
     */
    @Schema(description = "课程分类名称", example = "编程语言")
    private String categoryName;

    /**
     * 课程价格（0表示免费）
     */
    @Schema(description = "课程价格（0表示免费）", example = "99.00")
    private Double price;

    /**
     * 课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）
     */
    @Schema(description = "课程状态（0:草稿, 1:已发布, 2:已下架, 3:审核中）", example = "1")
    private Integer status;

    /**
     * 状态名称
     */
    @Schema(description = "状态名称", example = "已发布")
    private String statusName;

    /**
     * 课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）
     */
    @Schema(description = "课程难度（1:入门, 2:初级, 3:中级, 4:高级, 5:专家）", example = "1")
    private Integer difficulty;

    /**
     * 难度名称
     */
    @Schema(description = "难度名称", example = "入门")
    private String difficultyName;

    /**
     * 课程类型（1:录播课程, 2:直播课程, 3:混合课程）
     */
    @Schema(description = "课程类型（1:录播课程, 2:直播课程, 3:混合课程）", example = "1")
    private Integer type;

    /**
     * 类型名称
     */
    @Schema(description = "类型名称", example = "录播课程")
    private String typeName;

    /**
     * 课程标签（JSON格式）
     */
    @Schema(description = "课程标签（JSON格式）")
    private String tags;

    /**
     * 预计学习时长（小时）
     */
    @Schema(description = "预计学习时长（小时）", example = "40")
    private Integer estimatedHours;

    /**
     * 章节数量
     */
    @Schema(description = "章节数量", example = "10")
    private Integer chapterCount;

    /**
     * 课时数量
     */
    @Schema(description = "课时数量", example = "50")
    private Integer lessonCount;

    /**
     * 学习人数
     */
    @Schema(description = "学习人数", example = "1000")
    private Long studentCount;

    /**
     * 完成人数
     */
    @Schema(description = "完成人数", example = "800")
    private Long completedCount;

    /**
     * 完成率
     */
    @Schema(description = "完成率", example = "80.0")
    private Double completionRate;

    /**
     * 课程评分
     */
    @Schema(description = "课程评分", example = "4.5")
    private Double rating;

    /**
     * 评价数量
     */
    @Schema(description = "评价数量", example = "200")
    private Long reviewCount;

    /**
     * 课程介绍视频URL
     */
    @Schema(description = "课程介绍视频URL")
    private String introVideoUrl;

    /**
     * 学习目标
     */
    @Schema(description = "学习目标")
    private String objectives;

    /**
     * 适合人群
     */
    @Schema(description = "适合人群")
    private String targetAudience;

    /**
     * 先修要求
     */
    @Schema(description = "先修要求")
    private String prerequisites;

    /**
     * 课程大纲（JSON格式）
     */
    @Schema(description = "课程大纲（JSON格式）")
    private String syllabus;

    /**
     * 是否推荐（0-否，1-是）
     */
    @Schema(description = "是否推荐（0-否，1-是）", example = "1")
    private Integer isRecommend;

    /**
     * 是否热门（0-否，1-是）
     */
    @Schema(description = "是否热门（0-否，1-是）", example = "1")
    private Integer isHot;

    /**
     * 是否新课程（0-否，1-是）
     */
    @Schema(description = "是否新课程（0-否，1-是）", example = "1")
    private Integer isNew;

    /**
     * 是否免费（0-付费，1-免费）
     */
    @Schema(description = "是否免费（0-付费，1-免费）", example = "0")
    private Integer isFree;

    /**
     * 是否置顶（0-否，1-是）
     */
    @Schema(description = "是否置顶（0-否，1-是）", example = "0")
    private Integer isTop;

    /**
     * 发布时间
     */
    @Schema(description = "发布时间")
    private LocalDateTime publishTime;

    /**
     * 最后更新时间
     */
    @Schema(description = "最后更新时间")
    private LocalDateTime lastUpdateTime;

    /**
     * 课程有效期（天）
     */
    @Schema(description = "课程有效期（天）", example = "365")
    private Integer validityDays;

    /**
     * 排序值
     */
    @Schema(description = "排序值", example = "1")
    private Integer sortOrder;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 章节列表
     */
    @Schema(description = "章节列表")
    private List<CourseChapterVO> chapters;

    /**
     * 用户学习进度（当前用户）
     */
    @Schema(description = "用户学习进度", example = "50")
    private Integer userProgress;

    /**
     * 用户学习状态（当前用户）
     */
    @Schema(description = "用户学习状态", example = "1")
    private Integer userStatus;

    /**
     * 是否已购买（当前用户）
     */
    @Schema(description = "是否已购买", example = "true")
    private Boolean isPurchased;

    /**
     * 是否已收藏（当前用户）
     */
    @Schema(description = "是否已收藏", example = "false")
    private Boolean isFavorited;
}
